
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.*;

import dbUtil.*;
import iteradores.*;
import beans.*;
import reportes.*;

/**
 *
 * @author Administrador
 */
public class ManejadorReport extends HttpServlet {

    private String nombreModulo = "report";
    private IteradorUsuario usuarioActual;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("windows-1252");
        PrintWriter out = response.getWriter();
        String url = null;

        try {
            //Datos del usuario actual de la sesion, si esto es nulo significa
            //que aun no hizo login
            usuarioActual = (IteradorUsuario) request.getSession().getAttribute("usuarioActual");
            if (usuarioActual == null) {
                url = "login.jsp"; //Volver a loguearse

            } else {
                // Obtiene la conexión a la base de datos de la sesión
                Connection con = (Connection) request.getSession().getAttribute("ConexionBd");

                //Obtiene la operación a realizar 
                String str_op = request.getParameter("op");

                if (str_op != null) {
                    //Objeto que averigua si el usuario tiene permiso para acceder al servlet.
                    PgAbm testPermiso = new PgAbm();
                    testPermiso.setCon(con);

                    usuarioActual.getReset();
                    usuarioActual.getNext();
                    if (testPermiso.tienePermiso(nombreModulo,
                            usuarioActual.getNombreusuario(),
                            str_op.substring(0, 6))) {
                        url = "report.jsp?modo=SELECT";

                        if (str_op.equals("SELECT")) {
                            url = this.select_data(con, request, response);
                        } else if (str_op.equals("REPORT")) {
                            this.generate_report(con, request, response);
                        }
                    } else {
                        url = "sinpermiso.jsp";
                    }
                } else {
                    url = "admin.jsp";
                }
            }
            mostrar_pagina(url, request, response);
        } catch (Exception e) {
            e.printStackTrace(out);
        } finally {
            out.close();
        }
    }

    public void mostrar_pagina(String url, HttpServletRequest req, HttpServletResponse resp)
            throws Exception {
        RequestDispatcher disp = req.getRequestDispatcher(url);
        resp.setHeader("Cache-Control", "no-cache");
        resp.setCharacterEncoding("windows-1252");
        resp.setHeader("Pragma", "no-cache");
        resp.setIntHeader("Expires", 0);

        disp.forward(req, resp);
    }
    //<editor-fold defaultstate="collapsed" desc="Métodos ABM (SELECT, INSERT, UPDATE y DELETE).">
    public String select_data(Connection con, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String url = "report.jsp?modo=SELECT";
        String sql = "";
        Statement stm;

        con.setAutoCommit(false);

        sql = "select u.idusuario, nombreoperativo, idrol " +
                " from usuario u" +
                "	join usuario_rol ur on u.idusuario = ur.idusuario and ur.idrol = 3" +
                " order by 2";

        stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_READ_ONLY);

        System.out.println(sql);
        ResultSet result = stm.executeQuery(sql);
        IteradorUsuario mp = new IteradorUsuario(result);
        request.setAttribute("Solicitantes", mp);

        TipoRecurso tipos = new TipoRecurso();
        tipos.setCon(con);
        tipos.getTiposRecursos();

        IteradorTipoRecurso it = (IteradorTipoRecurso) tipos.getIteratorAll();
        request.setAttribute("TiposRecurso", it);

        Recurso recursos = new Recurso();
        recursos.setCon(con);
        recursos.getRecursos();

        IteradorRecurso it1 = (IteradorRecurso) recursos.getIteratorAll();
        request.setAttribute("Recursos", it1);

        return url;
    }

    public String generate_report(Connection con, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String url = "admin.jsp";
        String pathApp = "";
        Map params = new HashMap();

        String idsol = request.getParameter("idusuario");
        String idrec = request.getParameter("idrecurso");
        String idtiporec = request.getParameter("idtiporecurso");

        int idsolicitante;
        int idrecurso;
        int idtiporecurso;
        int tiporeporte = Integer.parseInt(request.getParameter("idtipo"));

        if (idsol.equalsIgnoreCase("")) {
            idsolicitante = 0;
        } else {
            idsolicitante = Integer.parseInt(idsol);
        }
        if (idrec.equalsIgnoreCase("")) {
            idrecurso = 0;
        } else {
            idrecurso = Integer.parseInt(idrec);
        }
        if (idtiporec.equalsIgnoreCase("")) {
            idtiporecurso = 0;
        } else {
            idtiporecurso = Integer.parseInt(idtiporec);
        }
        params.put("idsolicitante", idsolicitante);
        params.put("idrecurso", idrecurso);
        params.put("idtiporecurso", idtiporecurso);
        params.put("idtipo", tiporeporte);


        System.out.println(tiporeporte);

        pathApp = request.getContextPath();
        Listado jasper = new Listado(con, params, pathApp);
        if (tiporeporte == 0) {
            jasper.runReporte("ReservasPorSolicitante");
        }
        if (tiporeporte == 1) {
            jasper.runReporte("ReservasPorRecurso");
        }
        if (tiporeporte == 2) {
            jasper.runReporte("ReservasPorTipoRecurso");
        }
        if (tiporeporte == 3) {
            jasper.runReporte("SolicitudesPorRecurso");
        }
        if (tiporeporte == 4) {
            jasper.runReporte("SolicitudesPorTipoRecurso");
        }
        if (tiporeporte == 5) {
            jasper.runReporte("SolicitudesAprobadas");
        }
        
        return url;
    }

    public DBConfig getDataBaseConfig() {
        ServletContext scon = getServletContext();
        DBConfig dc = new DBConfig();
        dc.setDbname(scon.getInitParameter("dbname"));
        dc.setServer(scon.getInitParameter("dbserver"));
        dc.setUser(scon.getInitParameter("dbuser"));
        dc.setPass(scon.getInitParameter("dbpass"));
        return dc;
    }

    //</editor-fold>
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
